import { Graph } from '@antv/x6';

/**
 * NodeManager 用于集中管理自定义节点的注册、获取和卸载。
 */
class NodeManager {
  private static registeredNodes: Set<string> = new Set();

  /**
   * 注册自定义节点
   * @param name 节点名称
   * @param config 节点配置
   */
  static registerNode(name: string, config: object) {
    if (!NodeManager.registeredNodes.has(name)) {
      Graph.registerNode(name, config, true);
      NodeManager.registeredNodes.add(name);
    }
  }

  /**
   * 批量注册自定义节点
   * @param nodes 节点数组，每项包含 name 和 config
   */
  static registerNodes(nodes: { name: string; config: object }[]) {
    nodes.forEach(({ name, config }) => {
      NodeManager.registerNode(name, config);
    });
  }

  /**
   * 获取已注册节点的名称列表
   */
  static getRegisteredNodes(): string[] {
    return Array.from(NodeManager.registeredNodes);
  }

  /**
   * 卸载（注销）节点
   * @param name 节点名称
   */
  static unregisterNode(name: string) {
    if (NodeManager.registeredNodes.has(name)) {
      Graph.unregisterNode(name);
      NodeManager.registeredNodes.delete(name);
    }
  }

  /**
   * 卸载所有自定义节点
   */
  static unregisterAll() {
    NodeManager.registeredNodes.forEach((name) => {
      Graph.unregisterNode(name);
    });
    NodeManager.registeredNodes.clear();
  }
}

export default NodeManager; 